package org.znxs.znmanus.agent;


import org.znxs.znmanus.model.ZNAgentStatus;

/**
 * ReActAgent 类，主要用于 智能体用于 think 思考 和 act 调用 进行转换
 */
public abstract class ZNReActAgent extends ZNBaseAgent {


    /**
     * 处理当前状态并决定下一步行动
     * 子类实现
     *
     * @return 是否需要调用 act
     */
    public abstract Boolean think();

    /**
     * 单步调用 act 思考和行动
     * 子类实现
     *
     * @return 执行单步调用的结果
     */
    public abstract String act();


    @Override
    public String step() {

        try {
            Boolean needAct = this.think();
            if (!needAct) {
                setStatus(ZNAgentStatus.FINISHED);
                return "思考完成，无需行动";
            }
            return act();
        } catch (Exception e) {
            // 记录异常日志
            e.printStackTrace();
            return "步骤执行异常：" + e.getMessage();
        }
    }
}
